/**
 * 加载单个图片的工具函数
 * @param {string} src - 图片的URL路径
 * @returns {Promise<HTMLImageElement>} - 返回加载完成的图片元素Promise
 */
const loadImg = (src) => {
  return new Promise (resolve => {
    const img = new Image() // 创建Image对象
    img.crossOrigin = 'anonymous' // 设置跨域访问，避免CORS问题
    img.src = src // 设置图片源
    img.width = 224 // 设置图片宽度为224px（MobileNet模型的输入尺寸）
    img.height = 224 // 设置图片高度为224px
    img.onload = () => resolve(img) // 图片加载完成后解析Promise
  })
}

/**
 * 获取训练数据集的主要函数
 * @returns {Promise<Object>} - 返回包含inputs（图片数据）和labels（标签数据）的对象
 */
export const getInputs = async () => {
    const loadImgs = [] // 存储图片加载的Promise数组
    const labels = [] // 存储对应的标签数据
    
    // 循环加载30组数据（每个品牌30张图片）
    for(let i = 0; i< 30; i += 1) {
        // 遍历三个品牌类别
        ['android', 'apple', 'windows'].forEach((label) => {
            // 构建图片URL并加载图片
            const imgP = loadImg(`http://127.0.0.1:8080/brand/train/${label}-${i}.jpg`)
            loadImgs.push(imgP)
            
            // 创建one-hot编码的标签数组
            // 当前品牌为1，其他品牌为0
            labels.push([
                label === 'android' ? 1 : 0,
                label === 'apple' ? 1 : 0,
                label === 'windows' ? 1 : 0,
            ])
        })
    }
    
    // 等待所有图片加载完成
    const inputs = await Promise.all(loadImgs)
    
    // 返回图片数据和标签数据
    return {
        inputs, // HTMLImageElement数组
        labels // one-hot编码的标签数组
    }
}